1. Field of the Invention
This invention relates generally to an encoder and decoder system (“codec”) for compressing and decompressing data, and more particularly to a codec system that facilitates decoding segments of the compressed data independently and out of the order in which those segments were encoded.
2. Description of the Background Art
Demand for media (e.g., video, still images, etc.), especially high-definition (HD) media, has increased dramatically in recent years. Unfortunately, raw HD media contains very large amounts of data, which makes storing the raw data difficult. For example, storing a frame of raw HD video data requires a very large frame buffer. This is problematic when HD device developers are under pressure to reduce device sizes and costs.
Codecs are used to increase data compression in media devices. In a codec, the encoder receives the raw media data and encodes it into compressed data, which can be stored in memory for later retrieval. When the compressed data is retrieved from memory, it is sent to a decoder, which decodes the compressed data and outputs decoded media data for playback.
Codecs, however, introduce problems of their own. For example, popular image codecs (e.g., JPEG codecs, etc.) introduce data dependencies into the compressed data. As a result, the compressed data defining an image must be decoded in the same order in which it was encoded (i.e., in a first-in-first-out manner). This has the effect that a portion of the decoded image cannot be decoded and accessed without decoding the compressed data that was encoded before it. Codecs also suffer the disadvantage that they require detailed configuration information, for example a frame header, to be stored with the compressed data and transferred between the encoder and decoder. However, transmitting and storing the configuration information is a disadvantage because it increases both the amount of memory needed to store the compressed data and the amount of data that needs to be communicated within the media device.
What is needed, therefore, is a system and method that facilitates independent and selective access to segments of compressed data. What is also needed is a system and method that facilitates decoding segments of compressed data in a different order than they were encoded in. What is also needed is a system and method for compressing data that does not create data dependencies within the compressed data. What is also needed is a system and method that eliminates the need to transfer configuration information between the encoder and decoder.